<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<link rel="stylesheet" href="../style/journal.css" type="text/css" />
<style type="text/css"><!--
.googleadsense {
	margin: 2px;
	padding: 0px;
//--></style><script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
</script>
<script type="text/javascript">
_uacct = "UA-65008-1";
urchinTracker();
</script><title>modperl Apache2::HelloWorld</title>
</head>
<body>
<a href="index.html">Journal</a>(2005) | <a href="../blog/"><b>Blog</b></a>(2006) | <a href="http://www.fayland.org/cgi-bin/random_link.pl">RandomLink</a> | <a href="AboutFayland.html">WhoAmI</a> | <a href="LiveBookmark.html">LiveBookmark</a> | <a href="http://www.fayland.org/">HomePage</a>
<p><&lt;Previous: <a href="CityInfo_Beta.html">中国城市资料数据库 Beta 版</a>&nbsp;&nbsp;>>Next: <a href="Notes_on_Creating_Module.html">关于怎么创建新模块简单的纪录</a></p>
<h1>modperl Apache2::HelloWorld</h1>
<div class='content'>
<p>Category: <a href='mod_perl.html'>mod_perl</a> &nbsp; Keywords: <b>modperl</b></p>一个最标准的 <a href="http://perl.apache.org">modperl</a> 脚本可能是这样的：<br /><pre>package Apache2::F_H1;<p />use Apache2::RequestRec;<br />use Apache2::RequestIO;<br />use Apache2::Const -compile => qw(OK);<p />sub handler {<br /> &nbsp; &nbsp;my $r = shift;<br /> &nbsp; &nbsp;<br /> &nbsp; &nbsp;$r->content_type('text/html');<br /> &nbsp; &nbsp;$r->print('Hello World!');<br /> &nbsp; &nbsp;<br /> &nbsp; &nbsp;return Apache2::Const::OK;<br />}<p />1;</pre>然后在 perl.conf 或 httpd.conf 里写：<br /><pre>&lt;Perl><br /> &nbsp; &nbsp;use lib 'E:/modperl';<br />&lt;/Perl><p />PerlModule Apache2::F_H1<br />&lt;Location /h1><br />  SetHandler perl-script<br />  PerlResponseHandler Apache2::F_H1<br />&lt;/Location><br /></pre><ul>简单的解释下代码：<br /><li> <a href="http://search.cpan.org/perldoc?Apache2::RequestRec">Apache2::RequestRec</a> 用于处理请求，这里用到了它的 content_type<br /><li> <a href="http://search.cpan.org/perldoc?Apache2::RequestIO">Apache2::RequestIO</a> 则用于输入输出，这里用到了它的 print<br /><li> use <a href="http://search.cpan.org/perldoc?Apache2::Const">Apache2::Const</a> -compile => qw(OK); 则定义一些常量，这里是用到了 Apache2::Const::OK<br /><li> my $r = shift; 这个和 <a href="http://dev.catalyst.perl.org">Catalyst</a> 中程序第一句 my ( $self, $c ) = @_; 的 $c 很类似。几乎所有的 modperl 提交给 PerlResponseHandler 或其他 Perl*Handler 时，子程序第一句就必定应当是这句。<br /><li> 注意 1; 没有这个的话，Apache 很可能启动不起来。<br /></ul>而 sub handler 跟 Catalyst 中 View::<a href="http://www.template-toolkit.org">TT</a> 默认的 process 一样。如果没有指定其它的话，默认就是 handler.<br />当然我们也可以改变这个名字，如下面这样：<br /><pre>package Apache2::F_H2;<p />sub kissme {<br /> &nbsp; &nbsp;my $r = shift;<br /> &nbsp; &nbsp;<br /> &nbsp; &nbsp;$r->content_type('text/html');<br /> &nbsp; &nbsp;$r->print('Hello World!');<br /> &nbsp; &nbsp;<br /> &nbsp; &nbsp;return Apache2::Const::OK;<br />}<p />1;</pre>这样我们可以在 perl.conf 里这么写：<br /><pre>PerlModule Apache2::F_H2<br />&lt;Location /h2><br />  SetHandler modperl<br />  PerlResponseHandler Apache2::F_H2::kissme<br />&lt;/Location></pre>Handler 时指定了 kissme.<p />而这里没有那三个 use Apache2::*; 也能正常运行是因为 perl.conf 里 PerlRequire "C:/Apache2/conf/startup.pl", 且 startup.pl 载入了这一系列模块（包括这三）。<br />而 SetHandler 为什么即可以用 perl-script 又可以用 modperl 则参考 <a href='mod_perl_configuring.html'>mod_perl 配置的一些指令</a>.<p />这就是我们最简单的 Hello, World! 至此，我们可以访问 http://localhost/h2 或 h1 来享受我们的成果。</div>
<p><&lt;Previous: <a href="CityInfo_Beta.html">中国城市资料数据库 Beta 版</a>&nbsp;&nbsp;>>Next: <a href="Notes_on_Creating_Module.html">关于怎么创建新模块简单的纪录</a></p>
<p><strong>Options:</strong> <a href='http://del.icio.us/post?title=modperl%20Apache2::HelloWorld&url=http://www.fayland.org/journal/modperl_helloworld.html'>+Del.icio.us</a></p>
<strong>Related items</strong>
<ul><li><a href='modperl_http_cycle.html'>modperl 服务器的运行阶段和句柄</a> < <span class='digit'>2005-11-22 15:33:08</span> ></li><li><a href='modperl_PerlTransHandler.html'>modperl 的 PerlTransHandler 应用</a> < <span class='digit'>2005-11-23 22:24:02</span> ></li><li><a href='modperl_PerlAuthenHandler.html'>modperl 的用户验证</a> < <span class='digit'>2005-11-26 00:08:37</span> ></li><li><a href='modperl_Filter_part1.html'>modperl Filter Part1</a> < <span class='digit'>2005-12-18 14:47:29</span> ></li></ul>
Created on <span class="digit">2005-11-16 23:24:07</span>, Last modified on <span class="digit">2005-11-25 11:44:56</span><br />
Copyright 2004-2005 All Rights Reserved. Powered by <a href="Eplanet.html">Eplanet</a> && <a href='http://catalyst.perl.org'>Catalyst</a> 5.62.
</body>
</html>